package com.fdb.efp.nls.service.dao;

import com.fdb.efp.nls.service.domain.NlsApplyInfo;
import com.fdb.efp.nls.service.vo.NlsApplyInfoVO;
import com.fdb.basic.framework.core.bean.SedSynCusManageVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface NlsApplyInfoDao {

	public int insertNlsApplyInfo(NlsApplyInfo nlsApplyInfo);

	public int deleteByPk(NlsApplyInfo nlsApplyInfo);

	public int updateByPk(NlsApplyInfo nlsApplyInfo);

	public NlsApplyInfo queryByPk(NlsApplyInfo nlsApplyInfo);

	public NlsApplyInfo queryCopy(NlsApplyInfo nlsApplyInfo);

	public List<NlsApplyInfo> queryCertCode(NlsApplyInfoVO nlsApplyInfo);

	public List<NlsApplyInfo> queryAllOwnerByPage(NlsApplyInfoVO nlsApplyInfo);

	public List<NlsApplyInfo> queryAllCurrOrgByPage(NlsApplyInfoVO nlsApplyInfo);

	public List<NlsApplyInfo> queryAllCurrDownOrgByPage(NlsApplyInfoVO nlsApplyInfo);

	public List<NlsApplyInfo> queryAllCurrOwnerPrdByPage(NlsApplyInfoVO nlsApplyInfo);

	public List<NlsApplyInfo> queryListByConditions(NlsApplyInfo nlsApplyInfo);

	public List<NlsApplyInfo> queryByConditionByPage(NlsApplyInfo nlsApplyInfo);

	public List<NlsApplyInfo> queryListByBdIdPictureState();

	/**
	 * 用信申请临时表数据到网贷申请基本信息表有数据则更新，无则新增 <br>
	 * 0.2: weijj:2019年5月7日 下午7:27:56:新增 <br>
	 *
	 * @author weijj
	 * @date 2019年5月7日 下午7:27:56
	 * @version 0.1 初始为0.1,后续变更则修改
	 * @since 2019年5月7日 下午7:27:56
	 */
	public int insertOrUpdateNlsApplyInfo(List<NlsApplyInfo> updateList);

	public int batchUpdate(List<NlsApplyInfo> updateList);


	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年4月19日 下午8:09:34
	 * 功能描述：通过授信申请流水号查询最新一笔数据
	 */
	public NlsApplyInfo qryOneByLmtApplSeq(NlsApplyInfo nlsApplyInfo);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年4月20日 下午5:15:11
	 * 功能描述：根据条件查询信息，根据参数分页查询
	 */
	public List<NlsApplyInfo> queryByCondition2Page(NlsApplyInfo nlsApplyInfo);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年4月20日 下午5:30:46
	 * 功能描述：根据条件查询总条数
	 */
	public int queryTotalByCondition(NlsApplyInfo nlsApplyInfo);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年4月23日 下午5:40:20
	 * 功能描述：通过客户证件类型、证件号码，申请状态查询在途用信信息
	 */
	public int countCustHasUsingLetter(NlsApplyInfo nlsApplyInfo);

	/**
	 * 通过授信申请流水号查询同一笔申请下的所有授信申请: <br>
	 * <p>
	 * 0.1:caoxin:2019/5/22 17:56: <br>
	 *
	 * @return
	 * @author caoxin
	 * @date 2019/5/22 17:56
	 * @version 0.1
	 * @since 2019/5/22 17:56
	 */

	public List<NlsApplyInfo> queryListByLmtApplySqe(NlsApplyInfo nlsApplyInfo);

	/**
	 * 需求编号：2019D0519<br/>
	 * 问题编号：<br/>
	 * 功能描述：通过创建时间模糊查询（最新更新时间为空）或最近更新时间模糊查询所有当天所有用信记录<br/>
	 * 开发人员：周才顺<br/>
	 * 创建时间：2019年5月27日 下午7:23:36<br/>
	 *
	 * @param nlsApplyInfoVO
	 * @return
	 * @author zhoucs1
	 * @version 1.0
	 * @since 1.0
	 */
	public List<NlsApplyInfo> queryAllByCurrentDate(NlsApplyInfoVO nlsApplyInfoVO);


	public int batchUpdateCusManage(@Param(value = "sedSynCusManageVO") List<SedSynCusManageVO> sedSynCusManageVO);

	/**
	 * 通过全局流水号查询用信申请: <br>
	 * 0.1:caoxin:2019/7/2 16:51: TODO: <br>
	 *
	 * @return
	 * @author caoxin
	 * @date 2019/7/2 16:51
	 * @version 0.1
	 * @since 2019/7/2 16:51
	 */
    NlsApplyInfo queryByGobalSerno(@Param("gobalSerno") String gobalSerno);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年7月3日 上午11:35:49
	 * 功能描述：根据全局流水号统计信息
	 */
    public int countInfosByGlobalSerno(String globalSerno);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年7月8日 下午8:16:49
	 * 功能描述：通过授信申请流水号查询所有在途的支用申请信息 【目前在途的审批状态有：01 处理中，05：挂起】
	 */
    public List<NlsApplyInfo> queryAllByLmtApplySeq(String lmtApplySeq);

	public BigDecimal queryDuringAmt(NlsApplyInfoVO nlsApplyInfo);

	/**
	 * 开发人员：luzhaoyu
	 * 创建日期：2019/9/20
	 * 功能描述：贷后检查人工检查发起的随机样本取数
	 */
	public List<NlsApplyInfo> querySampleAll(NlsApplyInfo nlsApplyInfo);

	/**
	 * 开发人员：luzhaoyu
	 * 创建日期：2019/9/20
	 * 功能描述：贷后检查人工检查发起的随机样本取数
	 */
	public int queryCountAll(NlsApplyInfoVO nlsApplyInfoVO);

	/**
	 * 通过条件查询所有信息
	 *
	 * @param prdCodes
	 * @return
	 */
	public List<NlsApplyInfo> queryAllByPrdCodes(@Param("prdCodes") List<String> prdCodes);

	public List<NlsApplyInfoVO> queryCountAllCus(NlsApplyInfoVO nlsApplyInfoVo);

	int queryCountByBdIdPictureState();

	/**
	 * 根据产品获取四要素为空的用信数据
	 *
	 * @param prdId 产品编码
	 * @return 用信数据集
	 */
	public List<NlsApplyInfo> getFourElementsIfNullList(@Param("prdId") String prdId);


	/**
	 * 需求编号：2019D0519<br/>
	 * 问题编号：<br/>
	 * 功能描述：查询汇商贷在途的用信信息（筛选条件包括证件类型、证件号码、产品ID、用信审批状态）<br/>
	 * 开发人员：周才顺<br/>
	 * 创建时间：2019/9/3 17:15
	 *
	 * @Author zhoucs1
	 * @Version 1.0
	 * @Since 1.0
	 * @Param [nlsApplyInfo]
	 * @Return int
	 */
	int countHsdCustHasUsingLetter(NlsApplyInfo nlsApplyInfo);

	/**
	 * 需求编号:2019D08--
	 * 问题编号:查询成功的放款记录
	 * 开发人员: caoxin
	 * 创建日期:2019/11/11
	 * 功能描述:
	 * 修改日期:2019/11/11
	 * 修改描述:
	 */
	List<NlsApplyInfo> querySuccessNlsApplyInfo();

	/**
	 * 需求编号:2019D08--
	 * 问题编号:
	 * 开发人员: caoxin
	 * 创建日期:2019/11/12
	 * 功能描述:查询放款状态为成功而审批状态为成功的用信申请信息
	 * 修改日期:2019/11/12
	 * 修改描述:
	 */
	List<NlsApplyInfo> queryNlsApplyInfoByDnstsAndState(NlsApplyInfo nlsApplyInfo);

	/**
	 * 获取需要签章的用信申请记录
	 *
	 * @param prdId
	 * @param retryNum
	 * @param polFileType
	 * @param maxNum
	 * @return
	 */
	List<NlsApplyInfo> getSignatureNlsList(@Param("prdId") String prdId, @Param("retryNum") int retryNum, @Param("polFileType") String polFileType, @Param("maNum") int maxNum);

	/**
	 * 根据用信申请流水号查询授信申请流水号
	 *
	 * @param list
	 * @return
	 */
	List<NlsApplyInfo> queryByApplySeqs(@Param("list") List<String> list);

	/**
	 * 根据用信申请流水号更新用信申请状态
	 *
	 * @param nlsApplyState
	 * @param applySeq
	 * @return
	 */
	int updateStatusByApplySeq(@Param("nlsApplyState") String nlsApplyState, @Param("applySeq") String applySeq);

	/**
	 * 根据用信申请流水号更新用信贷款号 发放号
	 *
	 * @param loanSeq  贷款号
	 * @param distrNo  发放号
	 * @param applySeq 用信申请流水号
	 * @return
	 */
	int updateLoanSeqAndDistrNOByApplySeq(@Param("loanSeq") String loanSeq, @Param("distrNo") String distrNo, @Param("applySeq") String applySeq);

	/**
	 * 需求编号:2019D08--
	 * 问题编号:
	 * 开发人员:
	 * 创建日期:2020/03/25
	 * 功能描述:
	 * 修改日期:2020/03/25
	 * 修改描述:
	 */
	List<NlsApplyInfo> queryNlsApplyInfoByDnstsAndState2();


	NlsApplyInfo queryLatestNlsApplyInfo(NlsApplyInfo nlsApplyInfo);

	public List<NlsApplyInfo> queryCusId(@Param("cusId") String cusId);

    List<NlsApplyInfo> queryByLmtSeqs(@Param("lmtSeqs") List<String> lmtSeqs);

	public int queryCountByCertCode(NlsApplyInfo nlsApplyInfo);
	public int updateAcctNoByCertCode(NlsApplyInfo nlsApplyInfo);


	public int countApplyInfoOnWay(NlsApplyInfo nlsApplyInfo);
	/**
	 * 需求编号:
	 * 问题编号:
	 * 开发人员:zhangxc
	 * 创建日期:2020年8月4日15:23:49
	 * 功能描述:
	 * 修改日期:2020年8月4日15:23:56
	 * 修改描述:
	 */
	List<NlsApplyInfo> queryNlsApplyInfoByDnstsAndState4Yed();

    public NlsApplyInfo queryInfoByCertCodeAndApplyDate(NlsApplyInfo nlsApplyInfo);
}
